/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package beans;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 *
 * @author melina
 */
public class BeanUsuario {
    private String nome;
    private String login;
    private String senha;
    private String confirmacao; //usada apenas para validacao, não é salva em banco
    private int id;

    public BeanUsuario() {
           
    }
    
    public BeanUsuario(String nome, String senha, String login, int id) {
       this.nome= nome;
       this.senha= senha;
       this.login=login;
       this.id= id;        
    }
    
    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getSenha() {
        return senha;
    }
    
    public void setSenha(String senha) {    
    try {     
       this.senha = getHash(senha);
     } catch (Exception e) {
       System.out.println("Erro encriptação de senha - " + e);
     }
    }
    
    public String getConfirmacao() {
        return confirmacao;
    }

    
    public void setConfirmacao(String senha) {    
    try {     
       this.confirmacao = getHash(senha);
     } catch (Exception e) {
       System.out.println("Erro encriptação de senha - " + e);
     }
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    /**
    * Esta função retorna um hash da senha fornecida pelo usuário
    * Este hash é produzido utilizando o algoritmo MD5
    * @param senha A senha fornecida pelo usuário
    * @return O hash da senha fornecida pelo usuário
    * @throws java.security.NoSuchAlgorithmException Uma exceção
    * causada caso o algoritmo escolhido não exista.
    */
   private String getHash(String senha) throws NoSuchAlgorithmException
   {
      MessageDigest algoritmo; //Cria objeto usado para obter instância do algoritmo de criptografia MD5
      algoritmo = MessageDigest.getInstance("MD5"); //define o algoritmo a ser utilizado
      algoritmo.reset(); //por padrão chama reset antes de utilizar
      algoritmo.update(senha.getBytes()); //Fornece os bytes referentes à senha para gerar o hash
      byte [] messageDigest = algoritmo.digest(); //Obtém o hash
      StringBuilder s = new StringBuilder();
      for (int i = 0; i < messageDigest.length; i++) //Compatibiliza o hash do Java com o do MySQL
      {
        int parteAlta = ((messageDigest[i] >> 4) & 0xf) << 4; //Faz deslocamento de bits e AND lógico
        int parteBaixa = messageDigest[i] & 0xf; //faz AND lógico com o hash e 0xF
        if (parteAlta == 0) //Se parte alta for 0, concatena um 0 na string que representa o hash
          s.append('0');
        s.append(Integer.toHexString(parteAlta | parteBaixa)); //faz OR lógico entre a parte alta e parte baixa
      }
      return s.toString(); //Retorna a string que representa o hash da senha
   }
}
